ECMAScript 2020 (ES11) হলো জাভাস্ক্রিপ্টের একটি গুরুত্বপূর্ণ আপডেট যা ২০২০ সালে প্রকাশিত হয়। ES11 পূর্ববর্তী সংস্করণগুলোর উপর ভিত্তি করে তৈরি এবং এতে বিভিন্ন নতুন ফিচার ও উন্নত বৈশিষ্ট্য যুক্ত করা হয়েছে, যা ডেভেলপারদের জন্য কোড লেখাকে আরও সহজ, কার্যকর এবং শক্তিশালী করে তোলে। এই আপডেটে বড় সংখ্যা হ্যান্ডেল করা, নতুন অপারেটর, মডিউল সিস্টেমে উন্নতি, এবং বিভিন্ন স্ট্রিং ম্যানিপুলেশন ফিচার যুক্ত করা হয়েছে।
BigInt হলো একটি নতুন প্রিমিটিভ ডেটা টাইপ যা বড় সংখ্যাগুলো হ্যান্ডেল করতে পারে, যা Number
টাইপের সীমা ছাড়িয়ে যায়। এটি ১৮০৭ এর উপরে বড় সংখ্যা ধারণ করতে সক্ষম।
const largeNumber = 123456789012345678901234567890n;
console.log(largeNumber); // আউটপুট: 123456789012345678901234567890n
// BigInt এর সাথে Number এর তুলনা
const anotherNumber = 9007199254740991; // Number.MAX_SAFE_INTEGER
console.log(largeNumber > anotherNumber); // আউটপুট: true
ব্যাখ্যা: n
সাফিক্স ব্যবহার করে BigInt
তৈরি করা হয় এবং এটি বড় সংখ্যাগুলোকে সঠিকভাবে হ্যান্ডেল করতে সক্ষম হয়।
Dynamic Import এর মাধ্যমে কোড স্প্লিটিং সহজ করা যায় এবং প্রয়োজন অনুসারে মডিউলগুলো লোড করা সম্ভব হয়। এটি অ্যাসিঙ্ক্রোনাস ফাংশন import()
ব্যবহার করে করা হয়।
async function loadModule() {
const module = await import('./math.js');
console.log(module.add(2, 3)); // আউটপুট: 5
}
loadModule();
ব্যাখ্যা: import()
ফাংশনটি ডায়নামিকভাবে মডিউল লোড করে এবং প্রমিস রিটার্ন করে, যা await
এর মাধ্যমে হ্যান্ডেল করা যায়।
Nullish Coalescing Operator (??
) হলো একটি নতুন অপারেটর যা null
বা undefined
এর ক্ষেত্রে ডিফল্ট মান প্রদান করতে ব্যবহৃত হয়।
const foo = null ?? 'default string';
console.log(foo); // আউটপুট: 'default string'
const bar = 0 ?? 42;
console.log(bar); // আউটপুট: 0
ব্যাখ্যা: ??
অপারেটরটি শুধুমাত্র null
বা undefined
এর ক্ষেত্রে ডিফল্ট মান ব্যবহার করে, অন্যান্য ফালসি মান যেমন 0
, ''
, বা false
এর ক্ষেত্রে ডিফল্ট মান ব্যবহার করা হয় না।
Optional Chaining (?.
) অপারেটরটি ডিপলি নেস্টেড অবজেক্টের প্রপার্টি অ্যাক্সেস করতে ব্যবহৃত হয়, যেখানে কোনো পর্যায়ে null
বা undefined
থাকলে তা থামিয়ে দিয়ে undefined
রিটার্ন করে।
const user = {
name: 'Alice',
address: {
city: 'Dhaka',
}
};
console.log(user.address?.city); // আউটপুট: 'Dhaka'
console.log(user.contact?.phone); // আউটপুট: undefined
ব্যাখ্যা: ?.
অপারেটরটি চেক করে যে পূর্বের প্রপার্টি null
বা undefined
কিনা, এবং যদি না হয় তবে পরের প্রপার্টি অ্যাক্সেস করে।
Promise.allSettled() মেথডটি একটি অ্যারে অফ প্রমিসেস নেয় এবং প্রতিটি প্রমিসের ফলাফল (ফুলফিল্ড বা রিজেক্টেড) রিটার্ন করে একটি নতুন প্রমিসে রেজল্ভ হয়।
const promise1 = Promise.resolve(3);
const promise2 = new Promise((resolve, reject) => setTimeout(reject, 100, 'foo'));
const promise3 = 42;
Promise.allSettled([promise1, promise2, promise3]).then((results) => results.forEach((result) => console.log(result)));
/*
আউটপুট:
{ status: 'fulfilled', value: 3 }
{ status: 'rejected', reason: 'foo' }
{ status: 'fulfilled', value: 42 }
*/
ব্যাখ্যা: Promise.allSettled()
সব প্রমিসের স্টেটাস জানার জন্য ব্যবহৃত হয়, যা প্রমিসেসের সফলতা বা ব্যর্থতা নির্বিশেষে তাদের ফলাফল প্রদান করে।
matchAll()
মেথডটি একটি স্ট্রিংয়ের মধ্যে নির্দিষ্ট রেগুলার এক্সপ্রেশন অনুযায়ী সমস্ত ম্যাচ খুঁজে এবং একটি ইটারেটর রিটার্ন করে।
const regex = /\d+/g;
const str = 'There are 15 cats and 30 dogs.';
const matches = str.matchAll(regex);
for (const match of matches) {
console.log(match[0]);
}
/*
আউটপুট:
15
30
*/
ব্যাখ্যা: matchAll()
ইটারেটর ব্যবহার করে সব ম্যাচ একসাথে রিটার্ন করে, যা for-of
লুপে ব্যবহার করা যায়।
globalThis
হলো একটি স্ট্যান্ডার্ড গ্লোবাল অবজেক্ট অ্যাক্সেস করার পদ্ধতি, যা ব্রাউজার, Node.js এবং অন্যান্য পরিবেশে একইভাবে কাজ করে।
console.log(globalThis); // ব্রাউজারে window, Node.js এ global
ব্যাখ্যা: globalThis
ব্যবহার করে ডেভেলপাররা গ্লোবাল অবজেক্ট অ্যাক্সেস করতে পারেন, যা বিভিন্ন পরিবেশে আলাদা নাম ধারণ করে থাকে।
Module Namespace Exports এর মাধ্যমে একাধিক এক্সপোর্টকে একসাথে namespace হিসেবে ইমপোর্ট করা যায়।
// math.js
export const add = (a, b) => a + b;
export const subtract = (a, b) => a - b;
// main.js
import * as math from './math.js';
console.log(math.add(5, 3)); // আউটপুট: 8
console.log(math.subtract(5, 3)); // আউটপুট: 2
ব্যাখ্যা: import * as math
ব্যবহার করে math.js
এর সব এক্সপোর্টগুলো math
নামের namespace হিসেবে ইমপোর্ট করা হয়েছে।
import.meta
হলো একটি অবজেক্ট যা মডিউল সম্পর্কে তথ্য প্রদান করে, যেমন মডিউলের URL।
// main.js
console.log(import.meta.url); // আউটপুট: মডিউলের URL
ব্যাখ্যা: import.meta
ব্যবহার করে ডেভেলপাররা মডিউলের সংক্রান্ত তথ্য অ্যাক্সেস করতে পারেন, যা ডায়নামিক মডিউল লোডিং এবং অন্যান্য প্রয়োজনে ব্যবহৃত হয়।
BigInt
এর মাধ্যমে বড় সংখ্যাগুলো সঠিকভাবে হ্যান্ডেল করা যায়, যা আর্থিক হিসাব বা অন্যান্য উচ্চ পরিসরের গণনার ক্ষেত্রে প্রয়োজনীয়।async/await
, for-await-of
এবং Promise.allSettled()
এর মাধ্যমে অ্যাসিঙ্ক্রোনাস কোড লেখা আরও সহজ ও রিডেবল হয়।Object.fromEntries()
, Array.prototype.flat()
, এবং Array.prototype.flatMap()
মেথডগুলো ডেটা হ্যান্ডলিংকে আরও কার্যকরী করে তোলে।trimStart()
, trimEnd()
, এবং String.prototype.matchAll()
মেথডগুলো স্ট্রিং প্রসেসিংকে আরও সহজ করে।globalThis
ব্যবহার করে গ্লোবাল অবজেক্ট অ্যাক্সেস করা সহজ এবং পরিবেশ নির্বিশেষে একসাথে কাজ করে।ECMAScript 2020 (ES11) জাভাস্ক্রিপ্টের ভাষাকে আরও শক্তিশালী এবং কার্যকর করে তোলে। BigInt
এর মাধ্যমে বড় সংখ্যাগুলোকে হ্যান্ডেল করা সম্ভব হয়েছে, async/await
এবং for-await-of
এর মাধ্যমে অ্যাসিঙ্ক্রোনাস প্রোগ্রামিং উন্নত হয়েছে, এবং Object.fromEntries()
, Array.prototype.flat()
, ও Array.prototype.flatMap()
এর মাধ্যমে অবজেক্ট ও অ্যারের ম্যানিপুলেশন সহজ হয়েছে। এছাড়াও, স্ট্রিং ম্যানিপুলেশন, মডিউল সিস্টেম, এবং গ্লোবাল অবজেক্ট অ্যাক্সেসের নতুন ফিচারগুলো ডেভেলপারদের কোড লেখাকে আরও সংক্ষিপ্ত, পরিষ্কার এবং কার্যকরী করে তোলে।
এই নতুন বৈশিষ্ট্যগুলো শেখা এবং ব্যবহার করা ডেভেলপারদের কোডের গুণগত মান এবং কার্যকারিতা বৃদ্ধি করতে সহায়ক, যা বড় এবং জটিল প্রজেক্টগুলির ক্ষেত্রে বিশেষভাবে উপকারী।
BigInt
, Array.prototype.flat()
, Object.fromEntries()
, এবং Promise.prototype.finally()
মেথডগুলো ব্যবহার করে বিভিন্ন উদাহরণ তৈরি করুন।async
এবং await
ব্যবহার করে অ্যাসিঙ্ক্রোনাস ফাংশনগুলো লিখে দেখুন এবং তাদের কার্যকারিতা বুঝুন।Object.entries()
, Object.values()
, এবং Object.getOwnPropertyDescriptors()
মেথডগুলো ব্যবহার করে অবজেক্ট ম্যানিপুলেশন অনুশীলন করুন।trimStart()
, trimEnd()
, এবং String.prototype.matchAll()
মেথডগুলো স্ট্রিং ম্যানিপুলেশনে ব্যবহার করে বিভিন্ন উদাহরণ তৈরি করুন।import()
ব্যবহার করে ডায়নামিক মডিউল লোডিং অনুশীলন করুন।ES11 এর নতুন বৈশিষ্ট্যগুলোকে ভালোভাবে বুঝে এবং প্রয়োগ করে আপনি আপনার জাভাস্ক্রিপ্ট প্রোগ্রামিং দক্ষতাকে আরও উন্নত এবং কার্যকরী করতে পারবেন, যা আপনার কোডকে আরও নির্ভরযোগ্য এবং শক্তিশালী করে তুলবে।
Read more